# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Spanner.V1.Model.ExecuteBatchDmlRequest do
  @moduledoc """
  The request for ExecuteBatchDml.

  ## Attributes

  *   `lastStatements` (*type:* `boolean()`, *default:* `nil`) - Optional. If set to `true`, this request marks the end of the transaction. After these statements execute, you must commit or abort the transaction. Attempts to execute any other requests against this transaction (including reads and queries) are rejected. Setting this option might cause some error reporting to be deferred until commit time (for example, validation of unique constraints). Given this, successful execution of statements shouldn't be assumed until a subsequent `Commit` call completes successfully.
  *   `requestOptions` (*type:* `GoogleApi.Spanner.V1.Model.RequestOptions.t`, *default:* `nil`) - Common options for this request.
  *   `seqno` (*type:* `String.t`, *default:* `nil`) - Required. A per-transaction sequence number used to identify this request. This field makes each request idempotent such that if the request is received multiple times, at most one succeeds. The sequence number must be monotonically increasing within the transaction. If a request arrives for the first time with an out-of-order sequence number, the transaction might be aborted. Replays of previously handled requests yield the same response as the first execution.
  *   `statements` (*type:* `list(GoogleApi.Spanner.V1.Model.Statement.t)`, *default:* `nil`) - Required. The list of statements to execute in this batch. Statements are executed serially, such that the effects of statement `i` are visible to statement `i+1`. Each statement must be a DML statement. Execution stops at the first failed statement; the remaining statements are not executed. Callers must provide at least one statement.
  *   `transaction` (*type:* `GoogleApi.Spanner.V1.Model.TransactionSelector.t`, *default:* `nil`) - Required. The transaction to use. Must be a read-write transaction. To protect against replays, single-use transactions are not supported. The caller must either supply an existing transaction ID or begin a new transaction.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :lastStatements => boolean() | nil,
          :requestOptions => GoogleApi.Spanner.V1.Model.RequestOptions.t() | nil,
          :seqno => String.t() | nil,
          :statements => list(GoogleApi.Spanner.V1.Model.Statement.t()) | nil,
          :transaction => GoogleApi.Spanner.V1.Model.TransactionSelector.t() | nil
        }

  field(:lastStatements)
  field(:requestOptions, as: GoogleApi.Spanner.V1.Model.RequestOptions)
  field(:seqno)
  field(:statements, as: GoogleApi.Spanner.V1.Model.Statement, type: :list)
  field(:transaction, as: GoogleApi.Spanner.V1.Model.TransactionSelector)
end

defimpl Poison.Decoder, for: GoogleApi.Spanner.V1.Model.ExecuteBatchDmlRequest do
  def decode(value, options) do
    GoogleApi.Spanner.V1.Model.ExecuteBatchDmlRequest.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Spanner.V1.Model.ExecuteBatchDmlRequest do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
